package org.japo.java.basics.igu;

import org.japo.java.ui.components.PanelFondo;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import org.japo.java.basics.events.GEA;

public class IGU extends JFrame {

    // Componentes del IGU
    public JLabel lblPrueba;
    public JCheckBox cbxNegrita;
    public JCheckBox cbxCursiva;
    public JButton btnSuperior;
    public JButton btnInferior;
    public JComboBox<String> cbbFuente;

    public IGU() {
        inicializarComponentes();
    }

    private void inicializarComponentes() {
        // Tamaños de componentes
        Dimension dimEntero = new Dimension(200, 30);
        Dimension dimMedio = new Dimension(90, 30);

        // Valores de fuente
        String familia = "Calibri";
        int estilo = Font.PLAIN;
        int talla = 40;

        // Fuente de la etiqueta
        Font f = new Font(familia, estilo, talla);

        // Borde de etiqueta
        Border b = new BevelBorder(BevelBorder.LOWERED);

        // Etiqueta de prueba
        lblPrueba = new JLabel();
        lblPrueba.setFont(f);
        lblPrueba.setText("¡Texto de prueba!");
        lblPrueba.setHorizontalAlignment(JLabel.CENTER);
        lblPrueba.setOpaque(true);
        lblPrueba.setBackground(Color.WHITE);
        lblPrueba.setBorder(b);

        // Gestor de eventos de accion
        GEA gea = new GEA(this);

        // Selector de negrita
        cbxNegrita = new JCheckBox("Negrita");
        cbxNegrita.addActionListener(gea);
        cbxNegrita.setPreferredSize(dimEntero);
        cbxNegrita.setOpaque(false);

        // Selector de cursiva
        cbxCursiva = new JCheckBox("Cursiva");
        cbxCursiva.addActionListener(gea);
        cbxCursiva.setPreferredSize(dimEntero);
        cbxCursiva.setOpaque(false);

        // Boton aumentar tamaño
        btnSuperior = new JButton("+");
        btnSuperior.setPreferredSize(dimMedio);
        btnSuperior.setFont(f);
        btnSuperior.addActionListener(gea);

        // Boton aumentar tamaño
        btnInferior = new JButton("–");
        btnInferior.setPreferredSize(dimMedio);
        btnInferior.addActionListener(gea);
        btnInferior.setFont(f);

        // Obtener la lista de fuentes del sistema
        String[] listaFuentes = GraphicsEnvironment.
                getLocalGraphicsEnvironment().
                getAvailableFontFamilyNames();

        // Selector de fuentes
        cbbFuente = new JComboBox(listaFuentes);
        cbbFuente.setSelectedItem(familia);
        cbbFuente.setPreferredSize(dimEntero);
        cbbFuente.addActionListener(gea);

        // Imagen de fondo
        URL urlImagen = getClass().getResource("/img/fondo.jpg");
        Image i = new ImageIcon(urlImagen).getImage();

        // Panel de control
        JPanel pnlControl = new PanelFondo(i);
        FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 20, 20);
        pnlControl.setLayout(fl);
        pnlControl.add(cbxNegrita);
        pnlControl.add(btnSuperior);
        pnlControl.add(btnInferior);
        pnlControl.add(cbxCursiva);
        pnlControl.add(cbbFuente);

        // Panel principal
        JPanel pnlPrincipal = new JPanel();
        pnlPrincipal.setLayout(new GridLayout(2, 1));
        pnlPrincipal.add(lblPrueba);
        pnlPrincipal.add(pnlControl);

        // Ventana principal
        setTitle("Selección de fuente");
        setContentPane(pnlPrincipal);
        setResizable(false);
        setSize(500, 280);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
